home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 March / Gamestar_71_2005-03_dvd.iso / Dema / willofsteel_demo.exe / {app} / Data / Shaders / MultiAnimation00.fx < prev    next >
Text File  |  2004-10-23  |  5KB  |  187 lines

  1. float4x4 WorldViewProjection;
  2. float4x4 ShadowViewProjection;
  3. float4x4 TextureMatrix;
  4. float4x4 WorldMatrix;
  5. float4x4 ViewIT;
  6.  
  7. texture DiffuseTexture;
  8. texture ShadowTexture;
  9. texture CloudsTexture;
  10.  
  11. float4 SunColor       = { 1., 0.86, .70, .0 };
  12. float4 Ambient        = { 0.3058, 0.1827, .10, 1.0 };
  13. float3 LightDirection = { 0.7, 0.7, 0.0 };
  14. float4 ZBias          = { 0.0, 0.0, 0.0, -0.003 };
  15. float3 UpVector       = { 0.0, 1.0, 0.0 };
  16.  
  17. float4 Zero           = { .0, .0, .0, .0 };
  18.  
  19. float4 Selected       = { .0, 1., .0, 1. };
  20.  
  21. float4 CloudUVShift    = { 0.0, 0.0, 0.0, 0.0 };
  22. float4 CloudScale      = { 0.01, 0.01, 0.01, 0.01 };
  23.  
  24. #ifndef MATRIX_PALETTE_SIZE_DEFAULT
  25. #define MATRIX_PALETTE_SIZE_DEFAULT 23
  26. #endif
  27.  
  28. const int MATRIX_PALETTE_SIZE = MATRIX_PALETTE_SIZE_DEFAULT;
  29. float4x3 amPalette[ MATRIX_PALETTE_SIZE_DEFAULT ];
  30.  
  31.  
  32. //----------------------------------------------------------------------------
  33. // Shader body - VS_ Skin
  34. //----------------------------------------------------------------------------
  35.  
  36. // define the inputs -- caller must fill this, usually right from the VB
  37. struct VS_SKIN_INPUT
  38. {
  39.     float4      vPos;
  40.     float3      vBlendWeights;
  41.     float4      vBlendIndices;
  42.     float3      vNor;
  43. };
  44.  
  45. // return skinned position and normal
  46. struct VS_SKIN_OUTPUT
  47. {
  48.     float4 vPos;
  49.     float3 vNor;
  50. };
  51.  
  52. // call this function to skin VB position and normal
  53. VS_SKIN_OUTPUT VS_Skin( const VS_SKIN_INPUT vInput, int iNumBones )
  54. {
  55.     VS_SKIN_OUTPUT vOutput = (VS_SKIN_OUTPUT) 0;
  56.  
  57.     float fLastWeight = 1.0;
  58.     float fWeight;
  59.     float afBlendWeights[ 3 ] = (float[ 3 ]) vInput.vBlendWeights;
  60.     int aiIndices[ 4 ] = (int[ 4 ]) D3DCOLORtoUBYTE4( vInput.vBlendIndices );
  61.  
  62.     for( int iBone = 0; (iBone < 3) && (iBone < iNumBones - 1); ++ iBone )
  63.     {
  64.         fWeight = afBlendWeights[ iBone ];
  65.         fLastWeight -= fWeight;
  66.         vOutput.vPos.xyz += mul( vInput.vPos, amPalette[ aiIndices[ iBone ] ] ) * fWeight;
  67.         vOutput.vNor     += mul( vInput.vNor, amPalette[ aiIndices[ iBone ] ] ) * fWeight;
  68.     }
  69.  
  70.     vOutput.vPos.xyz += mul( vInput.vPos, amPalette[ aiIndices[ iNumBones - 1 ] ] ) * fLastWeight;
  71.     vOutput.vNor     += mul( vInput.vNor, amPalette[ aiIndices[ iNumBones - 1 ] ] ) * fLastWeight;
  72.  
  73.     return vOutput;
  74. }
  75.  
  76.  
  77. float4 lhtDir       = { 0.0f, 0.0f, -1.0f, 1.0f };                      // light Direction
  78. float4 lightDiffuse = { 0.6f, 0.6f, 0.6f, 1.0f };                       // Light Diffuse
  79. float4 MaterialAmbient : MATERIALAMBIENT = { 0.1f, 0.1f, 0.1f, 1.0f };
  80. float4 MaterialDiffuse : MATERIALDIFFUSE = { 0.8f, 0.8f, 0.8f, 1.0f };
  81.  
  82. float4x4    mViewProj : VIEWPROJECTION;
  83.  
  84. ///////////////////////////////////////////////////////
  85. struct VS_INPUT
  86. {
  87.     float4  Pos             : POSITION;
  88.     float3  BlendWeights    : BLENDWEIGHT;
  89.     float4  BlendIndices    : BLENDINDICES;
  90.     float3  Normal          : NORMAL;
  91.     float3  Tex0            : TEXCOORD0;
  92. };
  93.  
  94. struct VS_OUTPUT
  95. {
  96.     float4  Pos     : POSITION;
  97.     float4  Diffuse : COLOR;
  98.     float2  Tex0    : TEXCOORD0;
  99. };
  100.  
  101.  
  102. float3 Diffuse( float3 Normal )
  103. {
  104.     float CosTheta;
  105.  
  106.     // N.L Clamped
  107.     CosTheta = max( 0.0f, dot( Normal, lhtDir.xyz ) );
  108.  
  109.     // propogate scalar result to vector
  110.     return ( CosTheta );
  111. }
  112.  
  113.  
  114. VS_OUTPUT VShade( VS_INPUT i, uniform int iNumBones )
  115. {
  116.     VS_OUTPUT   o;
  117.     float3      Pos = 0.0f;
  118.     float3      Normal = 0.0f;
  119.     float       LastWeight = 0.0f;
  120.  
  121.     // skin VB inputs
  122.     VS_SKIN_INPUT vsi = { i.Pos, i.BlendWeights, i.BlendIndices, i.Normal };
  123.     VS_SKIN_OUTPUT vso = VS_Skin( vsi, iNumBones );
  124.  
  125.     // transform position from world space into view and then projection space
  126.     o.Pos = mul( float4( vso.vPos.xyz, 1.0f ), mViewProj );
  127.  
  128.     // normalize normals
  129.     Normal = normalize( vso.vNor );
  130.  
  131.     // Shade (Ambient + etc.)
  132.     o.Diffuse = float4( Diffuse( Normal ), 1.0 );
  133.  
  134.     // copy the input texture coordinate through
  135.     o.Tex0  = i.Tex0.xy;
  136.  
  137.     return o;
  138. }
  139.  
  140. int CurNumBones = 2;
  141.  
  142. VertexShader vsArray20[ 4 ] = { compile vs_2_0 VShade( 1 ),
  143.                                 compile vs_2_0 VShade( 2 ),
  144.                                 compile vs_2_0 VShade( 3 ),
  145.                                 compile vs_2_0 VShade( 4 ) };
  146.  
  147. VertexShader vsArray11[ 4 ] = { compile vs_1_1 VShade( 1 ),
  148.                                 compile vs_1_1 VShade( 2 ),
  149.                                 compile vs_1_1 VShade( 3 ),
  150.                                 compile vs_1_1 VShade( 4 ) };
  151.  
  152. VertexShader vsArray2s[ 4 ] = { compile vs_2_sw VShade( 1 ),
  153.                                 compile vs_2_sw VShade( 2 ),
  154.                                 compile vs_2_sw VShade( 3 ),
  155.                                 compile vs_2_sw VShade( 4 ) };
  156.  
  157. //////////////////////////////////////
  158. // Techniques specs follow
  159. //////////////////////////////////////
  160.  
  161. technique t0
  162. {
  163.     pass p0
  164.     {
  165.         VertexShader = ( vsArray20[ CurNumBones ] );
  166.         PixelShader = NULL;
  167.     }
  168. }
  169.  
  170. technique t1
  171. {
  172.     pass p0
  173.     {
  174.         VertexShader = ( vsArray11[ CurNumBones ] );
  175.         PixelShader = NULL;
  176.     }
  177. }
  178.  
  179. technique t2
  180. {
  181.     pass p0
  182.     {
  183.         VertexShader = ( vsArray2s[ CurNumBones ] );
  184.         PixelShader = NULL;
  185.     }
  186. }
  187.